package org.qq.util;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

/**
 * 
 * project_name:QQ
 * package_name:org.qq.util
 * file_name:Util.java
 * @author Link
 * create_date:2015年8月28日 下午2:09:39
 * modified_date:
 * description: 工具包
 *
 */
public class Util {
	
	/**
	 * 
	 * description: 设置窗体居中(传入参数为窗体类)
	 * 2015年8月13日 下午4:13:10
	 * @author Link
	 * void
	 *
	 */
	public static void screen(JFrame jframe){
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = jframe.getSize();
		jframe.setLocation((int)((screenSize.getWidth()-frameSize.getWidth())/2), (int)(screenSize.getHeight()-frameSize.getHeight())/2);
	}
	
	/**
	 * 
	 * description: 时间显示(传入参数为时间显示JLabel)
	 * 2015年8月28日 下午2:09:53
	 * @author Link
	 * void
	 *
	 */
	public static void timeView(final JLabel timeLabel){
		TimerTask task =new TimerTask() {		
			@Override
			public void run() {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
				timeLabel.setText(sdf.format(new Date()));		
			}
		};
			Timer timer = new Timer();
			timer.schedule(task, 0, 1);
	}
	
	/**
	 * 
	 * description: 判断字符串是否为数字(传入参数为一串字符串)
	 * 2015年8月28日 下午4:21:41
	 * @author Link
	 * boolean
	 *
	 */
	public static boolean isDigit(String s){
		char[] c = s.toCharArray();
		if(c.length!=8){
			return false;
		}else{
			for (char d : c) {
				if(Character.isDigit(d)){
					continue;
				}else{
					return false;
				}
			}
		}
		return true;
	}
	
	/**
	 * 
	 * description: 判断输入的密码是否合法(字母,数字以及"-"以外的符号组成)
	 * 2015年9月6日 上午9:42:35
	 * @author Link
	 * boolean
	 *
	 */
	public static boolean passwordIsLegal(String password){
		if(password.contains("-")||password.contains(" ")){
			return false;
		}else if(!(password.length()==password.getBytes().length)){
			return false;
		}
		return true;
	}
	
	/**
	 * 
	 * description: 性别选择(传入参数为两个性别选择按钮)
	 * creatTime:2015年8月28日下午11:07:08
	 * @author Link
	 * return type: String
	 *
	 */
	public static String sexSelect(JRadioButton manbutton,JRadioButton womenButton){
		String s = null;
		if(manbutton.isSelected()){
			s = manbutton.getText().toString(); 
		}else{
			s = womenButton.getText().toString();
		}
		return s;
	}
	/**
	 * 
	 * description: 判断登录输入的账号和密码是否正确(传入参数userInformation为服务器端所以用户信息(修改前修改后),str帐号与密码连在一起的字符串)
	 * creatTime:2015年8月29日下午9:10:37
	 * @author Link
	 * return type: boolean
	 *
	 */
	public static boolean judgeLoginMethod(ArrayList<String> userInformation,String str){
		ArrayList<String> list = new ArrayList<String>();//用于存储用户信息里的regist和modify信息
		for(int i =0;i<userInformation.size();i++){
			String s1 = userInformation.get(i);
			if(s1.startsWith(str.substring(0, 11))){//截取用户名,将用户名相同的取出放入集合list中
				list.add(s1);	
			}else{
				continue;
			}
		}
		if(list.size()!=0){
			String str1 = list.get(list.size()-1);//取集合中最后一个
			String[] str2 = str1.split("----");
			String str3 = str2[0]+"----"+str2[1];
			if(str3.equals(str)){//截取帐号和密码部分进行比较
				return true;
			}
		}
		return false;
	}
	/**
	 * 
	 * description: 判断注册用户是否已存在((传入参数userInformation为服务器端所以用户信息(修改前修改后),str为指定用户帐号))
	 * creatTime:2015年8月30日下午10:38:12
	 * @author Link
	 * return type: boolean
	 *
	 */
	public static boolean judgeRegistMethod(ArrayList<String> userInformation,String str){
		for(int i =0;i<userInformation.size();i++){
			String s1 = userInformation.get(i);
			if(s1.startsWith(str.substring(0, 11))){
				return true;	
			}else{
				continue;
			}
		}
		return false;
	}
	/**
	 * 
	 * description: 根据指定帐号获取存储的用户昵称(传入参数userInformation为服务器端所以用户信息(修改前修改后),str为指定帐号)
	 * 2015年9月2日 下午2:05:10
	 * @author Link
	 * String
	 *
	 */
	public static String gainNickNameMethod(ArrayList<String> userInformation,String str){
		ArrayList<String> list = new ArrayList<String>();//用于存储用户信息里的regist和modify信息
		for(int i =0;i<userInformation.size();i++){
			String s1 = userInformation.get(i);
			if(s1.startsWith("帐号:"+str)){//截取用户名,将用户名相同的取出放入集合list中
				list.add(s1);	
			}else{
				continue;
			}
		}
		String[] nickName = list.get(list.size()-1).split("----");
		String nickName1 = nickName[3].substring(3, nickName[3].length());
		return nickName1;
	}
	/**
	 * 
	 * description: 在线用户(返回用户昵称(账号))集合
	 * 2015年9月2日 下午1:57:58
	 * @author Link
	 * ArrayList<String>
	 *
	 */
	public static ArrayList<String> userOnlineNickNameMethod(){
		ArrayList<String> onlineUser = new ArrayList<String>();
		for(int i = 0;i<ServerAllData.socket.size();i++){
			onlineUser.add(ServerAllData.mapList.get(ServerAllData.socket.get(i))+"("+ServerAllData.nameList.get(ServerAllData.socket.get(i))+")");
		}
		return onlineUser;
	}
	/**
	 * 
	 * description: 获取所有用户最终信息(传入参数为服务器端所有的用户集合(包括修改前和修改后的))
	 * 2015年9月2日 下午2:43:34
	 * @author Link
	 * ArrayList<String>
	 *
	 */
	public static ArrayList<String> allUserInformationMethod(ArrayList<String> userInformation){
		HashSet<String> userName = new HashSet<String>();//获取帐号集合,为了避免重复,用HashSet装
		ArrayList<String> allUserName = new ArrayList<String>();//获取所有帐号,包括重复的
		for(int i = 0; i<userInformation.size();i++){
			userName.add(userInformation.get(i).substring(3, 11));
			allUserName.add(userInformation.get(i).substring(3, 11));
		}
		String[] userNameStr = userName.toArray(new String[userName.size()]);//将HashSet集合里面的元素转换成数组形式
		Integer[] index = new Integer[userName.size()];
		for(int i = 0;i<userName.size();i++){//获取每个帐号在userInformation最后一次出现处的索引
			index[i] = allUserName.lastIndexOf(userNameStr[i]);
		}
		ArrayList<String> allUser = new ArrayList<String>();//获取每个用户最终信息
		for(int i = 0;i<index.length;i++){
			allUser.add(userInformation.get(index[i]));
		}
		return allUser;
	}
	
	/**
	 * 
	 * description: 获取所有用户帐号信息(传入参数为服务器端所有的用户集合(包括修改前和修改后的))
	 * 2015年9月2日 下午4:51:42
	 * @author Link
	 * String[]
	 *
	 */
	public static String[] allUserNameMethod(ArrayList<String> userInformation){
		HashSet<String> userName = new HashSet<String>();//获取帐号集合,为了避免重复,用HashSet装
		for(int i = 0; i<userInformation.size();i++){
			userName.add(userInformation.get(i).substring(3, 11));
		}
		String[] userNameStr = userName.toArray(new String[userName.size()]);//将HashSet集合里面的元素转换成数组形式
		return userNameStr;
	}
	
	/**
	 * 
	 * description: 获取所有用户昵称(账号)部分(注:传入的allUserInformation集合是经过筛选后的用户最终的信息即需先执行本类中的allUserInformationMethod()方法)
	 * 2015年9月2日 下午4:27:08
	 * @author Link
	 * ArrayList<String>
	 *
	 */
	public static ArrayList<String> allUserNickNameInfoMethod(ArrayList<String> allUserInformation){
		ArrayList<String> allNickName = new ArrayList<String>();
		for (String string : allUserInformation) {
			String[] str = string.split("----");
			allNickName.add(str[3].substring(3, str[3].length())+"("+str[0].substring(3, 11)+")");
		}
		return allNickName;
	}
	
	/**
	 * 
	 * description: 判断账号是否已经登录
	 * creatTime:2015年9月2日下午10:43:00
	 * @author Link
	 * return type: boolean
	 *
	 */
	public static boolean judgeNameIsLoginMethod(String namestr){
		for(int i = 0;i<ServerAllData.onlineName.size();i++){
			if(namestr.equals(ServerAllData.onlineName.get(i))){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 
	 * description: 获取离线用户昵称(账号)
	 * creatTime:2015年9月2日下午9:58:19
	 * @author Link
	 * return type: ArrayList<String>
	 *
	 */
	public static ArrayList<String> offLineUserNickNameMethod(ArrayList<String> allUserNickName,ArrayList<String> userOnlineNickName){
		ArrayList<String>  offLineUserNickName = new ArrayList<String>();
		for(int i = 0;i<allUserNickName.size();i++){
			if(!userOnlineNickName.contains(allUserNickName.get(i))){
				offLineUserNickName.add(allUserNickName.get(i));
			}
		}
		return offLineUserNickName;
	}
}










